package study.java.thread03;

/**
* @Name: SellTicketRunnable
* @Description: 多线程练习（实现Runnable接口）
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-8 下午10:07:39 
* @Version: V1.0
 */
public class SellTicketRunnable03 implements Runnable {
	
	//创建100张票
	private static int tickets = 100 ;
	private int x = 0 ;
	private Demo d = new Demo() ;
	class Demo {}
	
	public void run() {
		while(true) {
			//同步代码块的锁为任意对象
			synchronized (d) { 
				if(tickets > 0) {
					System.out.println(Thread.currentThread().getName() + "正在出售第[" + (tickets--) + "]张票");
					try {
						//每卖一张票，休眠0.1秒
						Thread.sleep(100) ; 
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
//	public void run() {
//		while(true) {
//			if(x % 2 == 0) {
//				synchronized (SellTicketRunnable03.class) { 
//					if(tickets > 0) {
//						System.out.println(Thread.currentThread().getName() + "正在出售第[" + (tickets--) + "]张票");
//						try {
//							//每卖一张票，休眠0.1秒
//							Thread.sleep(100) ; 
//						} catch (InterruptedException e) {
//							e.printStackTrace();
//						}
//					}
//				}
//			} else {
//				sellTicket() ;
//			}
//			x++ ;
//		}
//	}
	//同步方法锁对象为当前对象this
//	public synchronized void sellTicket() {
//		if(tickets > 0) {
//			System.out.println(Thread.currentThread().getName() + "正在出售第[" + (tickets--) + "]张票");
//			try {
//				//每卖一张票，休眠0.1秒
//				Thread.sleep(100) ; 
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//		}
//	}
	//静态同步方法的锁对象为当前类的字节码文件对象
	public static synchronized void sellTicket() {
		if(tickets > 0) {
			System.out.println(Thread.currentThread().getName() + "正在出售第[" + (tickets--) + "]张票");
			try {
				//每卖一张票，休眠0.1秒
				Thread.sleep(100) ; 
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
